题目地址 (opens new window)

  • 🙂 第一次练习 2020年3月30日 我感觉这是一个数学问题,难难难....
  • 😄 第二次练习

# 利用数学方法求解

解题代码

class Solution {
    public int lastRemaining(int n, int m) {
        int ans = 0;
        // 最后一轮剩下2个人,所以从2开始反推
        for (int i = 2; i <= n; i++) {
            ans = (ans + m) % i;
        }
        return ans;
    }
}

# 利用数组模拟

public int lastRemaining(int n, int m) {
    ArrayList<Integer> arrayList = new ArrayList<>(n);
    for (int i = 0; i < n; i++) {
        arrayList.add(i);
    }

    int idx = 0;
    while(n > 1) {
        idx = (idx + m - 1) % n;
        arrayList.remove(idx);
        n --;
    }

    return arrayList.get(0);
}

# 易错点

  • 没有易错的,主要是想不到
最后编辑时间: 7/14/2020, 9:21:47 AM